/*
基本数据类型
1.常量：不可以被改变的量
    整型常量    ：1  ， 0， -100，234L
    字符常量    :'1','a','-', 转义字符：'\n' :换行 '\b'：回删（backspace） '\t' :制表符（tab） '\a':警告  %%：%  '\010':八进制10   \\:\
    实型常量    :1.23,-7.89  ,科学计数法 ：1.23e5(1.23乘以10的5次方，e可以是大写，e的前面必须有数值，e的后面必须是整数) 
    字符串常量  : "a","hello"
    符号常量    :#define   N 10    //用符号N 代替了10
    const修饰常量 ：const int a; int const a;等
2.变量：可以被改变的量
    基本数据类型
        整型     关键字                 格式占位符                     所占空间大小(Byte)      有符号取值范围      无符号取值范围
                 int                     %d                                4                 （-2^31~2^31-1）    0~2^32-1
     短整型  short/short int              %hd                               2
     长整型  long /long int               %l                                4
     长长整型 long long                   %ll                               8

     字符型       char                    %c                               1                         

        实型/浮点型
    单精度浮点类型 float                  %f                               4                   与数据小数位数有关系
    双精度浮点类型 double                 %lf                              8

3.有符号和无符号
    有符号 ：signed (一般情况下缺省)
        例如：int a;等价于 signed int a;
    无符号：unsigned
        例如：unsigned int a;
    以char类型为例  ：
        signed char a;//a的取值范围 -128 ~127  （-2^7~2^7-1）
        unsigned char a;//a的取值范围：0~255   (0~2^8-1)

4.变量：
    定义变量 ： 数据类型  变量名；
        变量名的命名规则：符合标识符的命名规则（由数字、字母、下划线组成，不能以数字开头），不能与关键字重名
        int a;//合法                 
        int a3;//合法
        int _abc;//合法
        int if;//不合法
        int 3a;//不合法
5.格式占位符
        %d:十进制有符号
        %u：无符号十进制
        %x：十六进制
        %o：八进制
6.格式化输入输出函数
        scanf("格式控制"，地址表列)；//特征：遇到空格/TAB或者回车停止读取，遇到回车结束  格式控制中如果有格式要求必须按照要求输入，否则数据有误
        注意：scanf格式控制里面不要加\n  !!!!!!!
        printf（"格式控制"，输出表列）;//双引号里面的内容原样输出
7.格数控制
    %m.nf 或者 %m.nlf  或者 %md
    m：输入/出数据域宽  （占几个字符宽度）   m>0时 ：右对齐    m<0: 左对齐    m<实际数据长度：按照实际数据长度输出
    n:保留小数的位数

8.float与double
        精度与整数部分和小数部分数据都有关，并没有 哪个类型就精确到小数点后几位的说法
        如果整数部分只有1位，float精确到小数点后第6位，double可以精确到小数点后第15位
        void main(void)
        {
        float a=10/3.0;//10/3 ==》3 两个整型数据运算得到结果是整数
        double b=10/3.0;
        printf("a=%f,b=%lf\n",a,b);
        printf("a=%.8f,b=%.8lf\n",a,b);
        float c=100/3.0;
        double d=100/3.0;
        printf("c=%.8f,d=%.8lf\n",c,d);
        printf("d=%.20lf\n",d);
        }
9.字符输入函数getchar
输出函数 putchar

*/
#include <stdio.h>
#define X(n) (n+n)   
#define Y(n)  n+n
int main(int argc, char const *argv[])
{
    int a,b,c,d;
    a=X(10);//代替了（10+10）   a=(10+10)
    b=Y(10);//代替了  10+10     a=10+10
    c=X(5)*2;//等价于  (5+5)*2   
    d=Y(5)*2;//等价于 5+5*2
    printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);
    return 0;
}

#if 0
#define N 100
int main(int argc, char const *argv[])
{
    int a=100;
    const int b=100;//修饰  变量b只具有只读属性
    printf("a=%d\n",a);
        printf("b=%d\n",b);
    printf("N =%d\n",N);
    a=a+1;
    //N=N+1;//!!!! 报错    不能修改
    //b=b+1;//!!!! 报错    不能修改
     printf("a=%d\n",a);
    printf("b=%d\n",b);
    printf("N =%d\n",N);
    return 0;
}


int main(int argc, char const *argv[])
{
    char ch;//字符类型变量 ch
  
    //格式化输入输出函数  输入输出单个字符
    // scanf("%c",&ch);
    // printf("ch=%c,ascii码=%d\n",ch,ch);
    //--------------------------
    while(1)//死循环
    {
         printf("请输入一个字符：");
        //字符输入函数 输出函数
        ch=getchar();//从键盘读入一个字符存入 变量ch    ，该函数需要敲回车结束
        putchar(ch);//输出一个字符 
    }
    return 0;
}



//练习  要求输入底圆的半径 和圆柱体的高  求圆柱体的面积（2个圆面积+侧面积） 和体积（底面积*高）
#define PI 3.14159
/*void:空的意思  没有返回值 没有参数*/
void main(void)
{
    double r,s,l,v,h;
    printf("请输入半径和高");
    scanf("%lf,%lf",&r,&h);//如果给了格式控制 就一定要按格式输入  如果没有两个数据中间用空格/tab/回车隔开都可以
    l=2*PI*r;//底圆周长
    s=2*(PI*r*r)+l*h;//面积
    v=(PI*r*r)*h;//体积
    printf("底圆半为%.2lf高位%.2lf的圆柱体的面积为%.2lf,体积为%.2lf\n",r,h,s,v);
}















//输入圆的半径 求圆的面积
#define PI 3.14   //符号常量  称为宏定义  作用:起文本替换的作用，方便程序的修改和阅读
int main(int argc, char const *argv[])
{
    //数据定义
   // int r,s;//r:半径  s:面积  //如果数据定义为整型，当前结果就为整数
   float r,s;
    printf("请输入半径：");
   // scanf("%d",&r);//对变量r进入输入赋值
   scanf("%f",&r);
    //计算
    s=PI*r*r;
    //输出面积
    printf("半径为%10.2f的圆面积为%-1.2f测试\n",r,s);//
    return 0;
}



//格式占位符的练习
int main1(int argc, char const *argv[])
{
    int a=101;
    printf("%%d a=%d\n",a);//在这里 %% 表示的输出% ，d原样输出  后面的%d是格式占位符
    printf("%%u a=%u\n",a);//0000 0000   0000 0000  0000 0000  0110 0101
    printf("%%o a=%o\n",a);//                                   1  4   5
    printf("%%x a=%x\n",a);//                                     6     5
    return 0;
}
#endif
